package com.wp.targetOffer;

/**
 * Created by 王萍 on 2017/3/7 0007.
 */
public class 替换空格 {

    public static void main(String[] args) {
        String string = "   ";
        System.out.println(replaceSpace(new StringBuffer(string)));
        System.out.println(replaceSpace1(new StringBuffer(string)));
        System.out.println(replaceSpace2(new StringBuffer(string)));
    }

    //将字符串转为char数组并遍历，若遍历的char是" "，则在新new的StringBuffer后面append"%20",否则append原字符。
    private static String replaceSpace(StringBuffer str) {

        StringBuffer newstr = new StringBuffer();

        String s = "%20";

        char[] chars = str.toString().toCharArray();
        for (char c : chars) {
            if (c == ' ') {
                newstr.append(s);
            } else {
                newstr.append(c);
            }
        }
        return newstr.toString();
    }

    //从前往后替换，后面的字符要不断往后移动，要多次移动，所以效率低下
    //从后往前，先计算需要多少空间，然后从后往前移动，则每个字符只为移动一次，这样效率更高一点。
    private static String replaceSpace1(StringBuffer str) {

        int spaceNum = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ') {
                spaceNum++;
            }
        }

        int newLength = str.length() + 2 * spaceNum;
        int newIndex = newLength - 1;
        int oldIndex = str.length() - 1;

        str.setLength(newLength);
        for (; oldIndex >= 0; --oldIndex) {
            if (str.charAt(oldIndex) == ' ') {
                str.setCharAt(newIndex--, '0');
                str.setCharAt(newIndex--, '2');
                str.setCharAt(newIndex--, '%');
            } else {
                str.setCharAt(newIndex--, str.charAt(oldIndex));
            }
        }
        return str.toString();
    }

    private static String replaceSpace2(StringBuffer str) {


        return str.toString().replaceAll(" ","%20");
    }
}

























